package xyz.sekai52799.interview.v;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class Question2 {
//    二进制数转字符串。给定一个介于0和1之间的实数（如0.72），类型为double，打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示，则打印“ERROR”。
//
//    示例1:
//
//    输入：0.625
//    输出："0.101"
//    示例2:
//
//    输入：0.1
//    输出："ERROR"
//    提示：0.1无法被二进制准确表示
//
//
//    提示：
//
//            32位包括输出中的 "0." 这两位。
//    题目保证输入用例的小数位数最多只有 6 位

    public String printBin(double num) {
        StringBuilder result = new StringBuilder();
        result.append("0.");
        Set<Double> last = new HashSet<Double>();

        do {
            double temp = num * 2d;
            if (temp >= 1d){
                result.append("1");
                num = temp - 1d;
            } else {
                result.append("0");
                num = temp;
            }
            if (last.contains(num)){
                return "ERROR";
            } else {
                last.add(num);
            }
            if (result.length() > 32){
                return "ERROR";
            }
        } while (num != 0d);
        return result.toString();
    }
}
